# -*- coding: utf-8 -*-
from django.contrib import admin
from django.contrib.admin.options import StackedInline

from intercampi.models import *
from intercampi.forms import *

from sisbase.widgets.foreign_key import ForeignKeyAdmin

# Inlines

class EnderecoInline(admin.StackedInline):
    
    form = EnderecoAdminForm
    model = Endereco
    extra = 1
    max_num = 1
    fieldsets = [
        ('', {'fields' : [('rua','numero','complemento'),('bairro','cep'),'cidade']}),
    ]
    
class DadosSaudeInline(admin.StackedInline):
    
    model = DadosSaude
    extra = 1
    max_num = 1
    fieldsets = [
        ('', {'fields' : [('tratamentoSomatico','descricaoTratamentoSomatico'), ('tratamentoPsicologico','descricaoTratamentoPsicologico'), ('tratamentoPsiquiatrico','descricaoTratamentoPsiquiatrico')]}),
    ]

# Models Admin

class AlunoAdmin(ForeignKeyAdmin):
    
    search_fields = ['pessoa__nome','eventos__tipoEvento__nome','eventos__descricao','pessoa__endereco__estado']
    list_display = ['pessoa','getTelefones','getUltimaTurma','getPrimeiraTurma']
    filter_horizontal = ('eventos','turmas')
    fieldsets = [
        ('', {'fields' : ['pessoa',]}),
        ('', {'fields' : [('receberTelefonema', 'receberEmail'),'eventos','turmas']}),
    ]
    
    related_search_fields = {
        'pessoa': ('^nome',),
    }

class DadosSaudeAdmin(admin.ModelAdmin):
    
    search_fields = ['pessoa__nome','descricaoTratamentoSomatico','descricaoTratamentoPsicologico','descricaoTratamentoPsiquiatrico']
    list_display = ['pessoa','descricaoTratamentoSomatico','descricaoTratamentoPsicologico','descricaoTratamentoPsiquiatrico']
    list_filter = ['tratamentoSomatico','tratamentoPsicologico','tratamentoPsiquiatrico']
    fieldsets = [
        ('', {'fields' : [('tratamentoSomatico','descricaoTratamentoSomatico'), ('tratamentoPsicologico','descricaoTratamentoPsicologico'), ('tratamentoPsiquiatrico','descricaoTratamentoPsiquiatrico'),'pessoa']}),
    ]

class EnderecoAdmin(admin.ModelAdmin):
    
    form = EnderecoAdminForm
    search_fields = ['rua','bairro','cidade__nome','cidade__estado__uf']
    list_display = ['rua','bairro','cidade','getEstado']
    fieldsets = [
        ('', {'fields' : [('rua','numero','complemento'),('bairro','cep'),'cidade','pessoa','unidadeInstituicao']}),
    ]

class EventoAdmin(admin.ModelAdmin):
    
    search_fields = ['descricao']
    list_filter = ('ativo',)
    list_display = ['descricao','tipoEvento','ativo']
    fieldsets = [
        ('', {'fields' : ['tipoEvento','descricao','valor']}),
        ('Evento Ativo', {'fields' : ['ativo']}),
    ]
    
class PesquisadorAdmin(ForeignKeyAdmin):
    
    search_fields = ['pessoa__nome','pesquisa__tema','producaoCientifica__descricao','especialidade']
    list_display = ['pessoa','especialidade']
    filter_horizontal = ('pesquisa','producaoCientifica')
    
    related_search_fields = {
        'pessoa': ('^nome',),
    }
    
class PessoaAdmin(admin.ModelAdmin):
    
    form = PessoaAdminForm
    search_fields = ['nome',]
    list_display = ['nome','email1']
    fieldsets = [
        ('Dados Pessoais', {'fields' : [('nome','cpf'),('rg','orgaoExpedidor'),('dataNascimento', 'profissao')]}),
        ('E-mails', {'fields' : [('email1','email2','email3')]}), 
        ('Telefones', {'fields' : [('telefone1','telefone2','telefone3','telefone4')]}),
        ('Data Atualizacao', {'fields' : ['dataAtualizacao',]}),
    ]
    inlines = [EnderecoInline, DadosSaudeInline]
    
    class Media:
        js = ("admin/js/remover_ultimo_inline.js",)

class ProfessorAdmin(ForeignKeyAdmin):
    
    search_fields = ['pessoa__nome','pessoa__endereco__estado']
    list_display = ['pessoa',]
    fieldsets = [
        ('', {'fields' : ['pessoa', 'tipoEvento', 'instituicao']}),
    ]
    
    related_search_fields = {
        'pessoa': ('^nome',),
    }
    
class TipoEventoAdmin(admin.ModelAdmin):
    
    search_fields = ['nome']
    list_display = ['nome']
    
class TurmaAdmin(admin.ModelAdmin):
    
    form = TurmaAdminForm
    search_fields = ['dataInicio']
    list_display = ['dataInicio','status','unidadeIntercampi']
    filter_horizontal = ('professores',)
    
class UnidadeIntercampiAdmin(admin.ModelAdmin):
    
    search_fields = ['nome']
    list_display = ['nome']
    
class UnidadeInstituicaoAdmin(admin.ModelAdmin):
    
    search_fields = ['nome']
    list_display = ['nome']
    inlines = [EnderecoInline]
    
    class Media:
        js = ("admin/js/remover_ultimo_inline.js",)

class VoluntarioAdmin(ForeignKeyAdmin):
    
    search_fields = ['pessoa__nome','quantidadeFilhos','msn','estadoCivil','idiomas']
    list_display = ['pessoa','msn','estadoCivil','idiomas']
    
    related_search_fields = {
        'pessoa': ('^nome',),
    }

admin.site.register(Aluno, AlunoAdmin)
admin.site.register(DadosSaude, DadosSaudeAdmin)
admin.site.register(Endereco, EnderecoAdmin)
admin.site.register(Pesquisador, PesquisadorAdmin)
admin.site.register(Pessoa, PessoaAdmin)
admin.site.register(Professor, ProfessorAdmin)
admin.site.register(TipoEvento, TipoEventoAdmin)
admin.site.register(Turma, TurmaAdmin)
admin.site.register(Evento, EventoAdmin)
admin.site.register(UnidadeIntercampi, UnidadeIntercampiAdmin)
admin.site.register(UnidadeInstituicao, UnidadeInstituicaoAdmin)
admin.site.register(Voluntario, VoluntarioAdmin)

admin.site.register(Cidade)
admin.site.register(Estado)
admin.site.register(Pesquisa)
admin.site.register(ProducaoCientifica)
admin.site.register(TipoProducaoCientifica)
admin.site.register(Instituicao)
